1
超越线性数组:扩展至多维数据
AI032Lesson 4
00:00

欢迎来到 伟大的交接。在CPU编程中,我们定义 如何 进行迭代;而在GPGPU中,我们定义 什么 一次迭代的形态。这种从以指令为中心转向以数据为中心的逻辑转变,由 内核抽象所驱动。

1. __global__ 蓝图

通过使用 __global__ 限定符,你并不是在编写一个函数——而是在设计一个 可扩展的蓝图。单个内核执行代表一个独立的工作单元,使GPU能够在不手动管理线程的情况下,利用其庞大的核心数量协调数千个相同任务。

2. 全局地址解析器

在数百万个线程中,单个线程如何找到其目标?它使用一种确定性的协议,称为索引公式:

$$\text{线程ID} = \text{blockIdx.x} \times \text{blockDim.x} + \text{threadIdx.x}$$

该公式充当坐标系统,将软件的逻辑数据(数组)与硬件的物理层次结构(块和线程)连接起来。

全局内存数组(1000万个元素)块 0块 1块 N-1索引 = 1 × blockDim + threadIdx

3. 执行配置

参数 <<<B, T>>> 定义了网格形状。这确保了 透明可扩展性:无论硬件拥有2个流式多处理器(SM)还是80个,你的代码都能运行相同的逻辑。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>